var DetailRoleForm, addRoleForm, updateRoleForm; // 角色详情表单
var DeleteWindow;
var DetailRoleWindow; // 角色详细信息窗口
var RoleGridPanel, ZCDeleteGridPanel;
var RoleStore, ZCDeleteStore; // 存放查询数据的表格的存贮变量
var selections, removeDelete; // 得到复选框选中的全部记录
var updateInput, updateRule, addInput, addRule, detailInput, detailRule;
var NameOfRole;
var RoleRecord;
var IdOfRole;
/*
 * 通过查询条件连接数据库得到数据 --- 未完成
 * 
 */

var AssetRecord = new Ext.data.Record.create([{
			name : 'value'
		}, {
			name : 'text'
		}]);
selectedstore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						url : '/FAM/SearchJS'
					}),
			reader : new Ext.data.JsonReader({
						root : 'result'
					}, AssetRecord),
			sortInfo : {
				field : 'value',
				direction : 'ASC'
			}
		});
unselectedstore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						url : '/FAM/SearchJS'
					}),
			reader : new Ext.data.JsonReader({
						root : 'result'
					}, AssetRecord),
			sortInfo : {
				field : 'value',
				direction : 'ASC'
			}
		});

var ds = new Ext.data.ArrayStore({
			data : [[1, '1.资产维护添加'], [2, '2.资产维护删除'], [3, '3.资产维护更新'],
					[4, '4.资产维护查询'], [5, '5.资产报损添加'], [6, '6.资产报损删除'],
					[7, '7.资产报损更新'], [8, '8.资产报损查询'], [9, '9.资产调拨添加'],
					[10, '10.资产调拨删除'], [11, '11.资产调拨更新'], [12, '12.资产调拨查询'],
					[13, '13.资产出售添加'], [14, '14.资产出售删除'], [15, '15.资产出售更新'],
					[16, '16.资产出售查询'], [17, '17.资产维修添加'], [18, '18.资产维修删除'],
					[19, '19.资产维修更新'], [20, '20.资产维修查询'], [21, '21.资产报表查看添加'],
					[22, '22.资产报表查看删除'], [23, '23.资产报表查看更新'],
					[24, '24.资产报表查看查询'], [25, '25.购置申请添加'], [26, '26.购置申请删除'],
					[27, '27.购置申请更新'], [28, '28.购置申请查询'], [29, '29.购置申请审批'],
					[30, '30.添加部门'], [31, '31.添加资产类别'], [32, '32.用户添加'],
					[33, '33.用户删除'], [34, '34.用户更新'], [35, '35.用户查询'],
					[36, '36.角色添加'], [37, '37.角色删除'], [38, '38.角色更新'],
					[39, '39.角色查询']],
			fields : ['value', 'text'],
			sortInfo : {
				field : 'value',
				direction : 'ASC'
			}
		});

var Query = function() {
	RoleStore.baseParams['start'] = '0';
	RoleStore.baseParams['limit'] = '15';
	RoleStore.baseParams['roleName'] = Ext.getCmp('roleName').getValue();
	RoleStore.baseParams['un'] = '';
	RoleStore.reload();
	// var t = Ext.getCmp('roleName').getValue();
}
var DeleteZC = function() {
	var record, data = " ";
	DeleteWindow.hide();
	for (var i = 0; i < ZCDeleteStore.getCount(); i++) {
		var record = ZCDeleteStore.getAt(i);
		data += record.get('roleID') + " ";
	}
	Ext.Ajax.request({
				url : '/FAM/deleteJS',
				success : function(response, opts) {
					var result = Ext.util.JSON.decode(response.responseText);
					if (result.success) {
						insertUserLog(5);
						Ext.Msg.alert('成功', result.msg, function() {
									RoleStore.reload();
								}, null);
					}
				},
				failure : function() {
					insertUserLog(6);
					Ext.Msg.alert('错误', "添加失败");
				},
				params : {
					data : data
				}
			});

}
var AccessDBtoDelete = function() {
	var length = removeDelete.length;

	for (var i = 0; i < length; i++) {
		var record = removeDelete[0];
		ZCDeleteStore.remove(record);
	}
}
var DeleteSelectedRole = function() {
	BuildDeleteZCGrid();
	BuildDeleteWindow();

	var length = selections.length;

	for (var i = 0; i < length; i++) {
		var record = selections[i];
		ZCDeleteStore.add(record);
	}

	DeleteWindow.show();
}

/*
 * 建立存放角色信息的布局
 */
var BuildRoleGrid = function() {
	var SelectModel = new Ext.grid.CheckboxSelectionModel({
				listeners : {
					selectionchange : function(sm) {
						selections = RoleGridPanel.getSelectionModel()
								.getSelections();

						if (sm.getCount()) {
							RoleGridPanel.removeButton.enable();
							RoleGridPanel.updateButton.enable();
						} else {
							RoleGridPanel.removeButton.disable();
							RoleGridPanel.updateButton.disable();
						}
					}
				}
			});

	var RoleColumnModel = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),
			SelectModel, {
				header : '角色编号',
				width : 100,
				sortable : true,
				dataIndex : 'roleID'
			}, {
				header : '角色名称',
				width : 100,
				sortable : true,
				dataIndex : 'name'
			}, {
				id : 'rdescribe',
				header : '角色描述',
				sortable : false,
				dataIndex : 'rdescribe'
			}]);

	RoleRecord = new Ext.data.Record.create([{
				name : 'roleID'
			}, {
				name : 'name'
			}, {
				name : 'rdescribe'
			}, {
				name : 'rAssetCreate'
			}, {
				name : 'rAssetRead'
			}, {
				name : 'rAssetUpdate'
			}, {
				name : 'rAssetDelete'
			},

			{
				name : 'rAssetDamageCreate'
			}, {
				name : 'rAssetDamageRead'
			}, {
				name : 'rAssetDamageUpdate'
			}, {
				name : 'rAssetDamageDelete'
			},

			{
				name : 'rAssetChangeCreate'
			}, {
				name : 'rAssetChangeRead'
			}, {
				name : 'rAssetChangeUpdate'
			}, {
				name : 'rAssetChangeDelete'
			},

			{
				name : 'rAssetSaleCreate'
			}, {
				name : 'rAssetSaleRead'
			}, {
				name : 'rAssetSaleUpdate'
			}, {
				name : 'rAssetSaleDelete'
			},

			{
				name : 'rAssetServiceCreate'
			}, {
				name : 'rAssetServiceRead'
			}, {
				name : 'rAssetServiceUpdate'
			}, {
				name : 'rAssetServiceDelete'
			},

			{
				name : 'rPurchaseSupplyCreate'
			}, {
				name : 'rPurchaseSupplyRead'
			}, {
				name : 'rPurchaseSupplyUpdate'
			}, {
				name : 'rPurchaseSupplyDelete'
			}, {
				name : 'rPurchaseSupplyApprove'
			},

			{
				name : 'rOldReport'
			}, {
				name : 'rChangeReport'
			}, {
				name : 'rServiceReport'
			}, {
				name : 'rAssetReport'
			},

			{
				name : 'rCreateUser'
			}, {
				name : 'rReadUser'
			}, {
				name : 'rUpdateUser'
			}, {
				name : 'rDeleteUser'
			},

			{
				name : 'rCreateRole'
			}, {
				name : 'rReadRole'
			}, {
				name : 'rUpdateRole'
			}, {
				name : 'rDeleteRole'
			},

			{
				name : 'rAssetSortDictionary'
			}, {
				name : 'rDepartmentDictionary'
			}]);

	RoleStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '/FAM/SearchJS'
						}),
				reader : new Ext.data.JsonReader({
							totalProperty : 'totalCount',
							root : 'result'
						}, RoleRecord),
				remoteSort : true
			});

	var tb = new Ext.Toolbar({
		items : [{
					iconCls : 'add',
					tooltip : '添加一个角色记录',
					text : '添 加',
					handler : function() {
						addRoleWindow.show();
						// Ext.getCmp('delete').hide();
						// RoleColumnModel.setHidden(1, true);
					}
				}, '-', {
					iconCls : 'delete',
					id : 'delete',
					tooltip : '删除选中的角色信息',
					text : '删  除',
					ref : '../removeButton',
					disabled : true,
					handler : DeleteSelectedRole
				}, '-', {
					iconCls : 'edit',
					text : '修 改',
					ref : '../updateButton',
					disabled : true,
					tooltip : '修改选中的角色信息',
					handler : function() {
						if (selections.length > 1) {
							alert("你只能选择一条记录");
							SelectModel.clearSelections();
						} else {
							for (var i = 0; i < selections.length; i++) {
								var record = selections[i];
								changesAssetWindow.show();
								NameOfRole = record.get('name');
								IdOfRole = record.get('roleID');
								updateRoleForm.getForm().loadRecord(record);
							}
							selectedstore.baseParams['start'] = '0';
							selectedstore.baseParams['limit'] = '15';
							selectedstore.baseParams['roleName'] = NameOfRole;
							selectedstore.baseParams['un'] = '0';
							unselectedstore.baseParams['start'] = '0';
							unselectedstore.baseParams['limit'] = '15';
							unselectedstore.baseParams['roleName'] = NameOfRole;
							unselectedstore.baseParams['un'] = '1';
							selectedstore.reload();
							unselectedstore.reload();
						}
					}
				}, '-', '角色名称:', {
					fieldLabel : '角色名称',
					xtype : 'textfield',
					emptyText : '请输入查询条件',
					id : 'roleName',
					name : 'roleName'
				}, '', {
					iconCls : 'query',
					text : '查  询',
					tooltip : '查询要删除的角色信息',
					handler : Query
				}]
	});
	RoleGridPanel = new Ext.grid.GridPanel({
				title : '查询的角色信息(提示：~^0^~ 双击表格中的某行可以查看该行的详情 ~^0^~)',
				width : '100%',
				height : 500,
				layout : 'fit',
				store : RoleStore,
				cm : RoleColumnModel,
				sm : SelectModel,
				autoExpandColumn : 'rdescribe',
				stripeRows : true,
				loadMask : true,
				plugins : new Ext.ux.PanelResizer({
							minHeight : 100
						}),
				tbar : tb,
				bbar : new Ext.PagingToolbar({
							pageSize : 15,
							store : RoleStore,
							displayInfo : true,
							plugins : new Ext.ux.ProgressBarPager()
						})
			});

	RoleGridPanel.addListener('rowdblclick', function(RoleGridPanel, rowIndex,
			event) // 将RoleGridPanel的数据加载到UpdataFormPanel中
			{
				var record = RoleGridPanel.getStore().getAt(rowIndex);
				NameOfRole = record.get('name');
				IdOfRole = record.get('roleID');
				selectedstore.baseParams['start'] = '0';
				selectedstore.baseParams['limit'] = '15';
				selectedstore.baseParams['roleName'] = NameOfRole;
				selectedstore.baseParams['un'] = '0';
				unselectedstore.baseParams['start'] = '0';
				unselectedstore.baseParams['limit'] = '15';
				unselectedstore.baseParams['roleName'] = NameOfRole;
				unselectedstore.baseParams['un'] = '1';
				selectedstore.reload();
				unselectedstore.reload();
				DetailRoleWindow.show();
				DetailRoleForm.getForm().loadRecord(record);
			});
}

var BuildDeleteZCGrid = function() {
	var SelectModel = new Ext.grid.CheckboxSelectionModel({
				listeners : {
					selectionchange : function(sm) {
						removeDelete = ZCDeleteGridPanel.getSelectionModel()
								.getSelections();

						if (sm.getCount()) {
							ZCDeleteGridPanel.removeButton.enable();

						} else {
							ZCDeleteGridPanel.removeButton.disable();

						}
					}
				}
			});

	var RoleColumnModel = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),
			{
				header : '角色编号',
				sortable : true,
				dataIndex : 'roleID'
			}, {
				header : '角色名称',
				sortable : true,
				dataIndex : 'name'
			}, {
				id : 'rdescribe',
				header : '角色描述',
				sortable : false,
				dataIndex : 'rdescribe'
			}, SelectModel]);

	ZCDeleteStore = new Ext.data.Store({
				proxy : new Ext.data.MemoryProxy(),
				reader : new Ext.data.ArrayReader({}, RoleRecord)
			});

	ZCDeleteGridPanel = new Ext.grid.GridPanel({
				width : '100%',
				autoHeight : true,
				store : ZCDeleteStore,
				cm : RoleColumnModel,
				autoExpandColumn : 'rdescribe',
				sm : SelectModel,
				stripeRows : true,
				loadMask : true,
				tbar : ['->', {
							iconCls : 'delete',
							tooltip : '移除选中要删除的角色信息',
							text : '移   除',
							ref : '../removeButton',
							disabled : true,
							handler : AccessDBtoDelete
						}]
			});
}

updateInput = new Ext.form.FieldSet({
			title : '基本信息输入',
			border : true,
			labelWidth : 65,
			width : '550',
			layout : 'column',
			autoHeight : true,
			defaults : {
				columnWidth : '.5',
				border : false,
				layout : 'form'
			},
			items : [{
						bodyStyle : 'padding-left:10px;',
						items : [{
									xtype : 'textfield',
									name : 'name',
									width : 150,
									allowBlank : false,
									fieldLabel : '角色名称'
								}]
					}, {
						items : [{
									xtype : 'textarea',
									name : 'rdescribe',
									width : 200,
									allowBlank : false,
									fieldLabel : '角色描述'
								}]
					}]
		});
updateRule = new Ext.form.FieldSet({
			title : '权限选择',
			border : true,
			labelWidth : 20,
			width : '550',
			autoHeight : true,
			bodyStyle : 'padding:5px 5px;',
			defaults : {
				columnWidth : '.5',
				border : true,
				autoWidth : true,
				layout : 'column'
			},
			items : [{
						xtype : 'itemselector',
						name : 'js',
						imagePath : '/FAM/ext/ux/images/',
						multiselects : [{
									width : 200,
									height : 150,
									store : unselectedstore,
									displayField : 'text',
									style : 'margin-right:10px;',
									valueField : '备选角色'
								}, {
									width : 200,
									height : 150,
									style : 'margin-left:10px;',
									valueField : '已选角色',
									store : selectedstore,
									displayField : 'text'
								}]
					}],
			buttons : [{
						iconCls : 'error',
						text : '全消',
						style : 'margin-right:20px;',
						handler : function() {
							DetailRoleForm.getForm().findField('js').reset();
						}
					}]
		});

addInput = new Ext.form.FieldSet({
			title : '基本信息输入',
			border : true,
			labelWidth : 65,
			width : '550',
			layout : 'column',
			autoHeight : true,
			defaults : {
				columnWidth : '.5',
				border : false,
				layout : 'form'
			},
			items : [{
						bodyStyle : 'padding-left:10px;',
						items : [{
									xtype : 'textfield',
									name : 'name',
									width : 150,
									allowBlank : false,
									fieldLabel : '角色名称'
								}]
					}, {
						items : [{
									xtype : 'textarea',
									name : 'rdescribe',
									width : 200,
									allowBlank : false,
									fieldLabel : '角色描述'
								}]
					}]
		});
addRule = new Ext.form.FieldSet({
			title : '权限选择',
			border : true,
			labelWidth : 20,
			width : '550',
			autoHeight : true,
			bodyStyle : 'padding:5px 5px;',
			defaults : {
				columnWidth : '.5',
				border : true,
				autoWidth : true,
				layout : 'column'
			},
			items : [{
						xtype : 'itemselector',
						name : 'js',
						imagePath : '/FAM/ext/ux/images/',
						multiselects : [{
									width : 200,
									height : 150,
									store : ds,
									displayField : 'text',
									style : 'margin-right:10px;',
									valueField : '备选权限'
								}, {
									width : 200,
									height : 150,
									style : 'margin-left:10px;',
									valueField : '已选权限',
									store : []
								}]
					}],
			buttons : [{
						iconCls : 'error',
						text : '全消',
						style : 'margin-right:20px;',
						handler : function() {
							addRoleForm.getForm().findField('js').reset();
						}
					}]
		});
detailInput = new Ext.form.FieldSet({
			title : '基本信息输入',
			border : true,
			labelWidth : 65,
			width : '550',
			layout : 'column',
			autoHeight : true,
			defaults : {
				columnWidth : '.5',
				border : false,
				layout : 'form'
			},
			items : [{
						bodyStyle : 'padding-left:10px;',
						items : [{
									xtype : 'textfield',
									name : 'name',
									width : 150,
									disabled : true,
									allowBlank : false,
									fieldLabel : '角色名称'
								}]
					}, {
						items : [{
									xtype : 'textarea',
									name : 'rdescribe',
									width : 200,
									disabled : true,
									allowBlank : false,
									fieldLabel : '角色描述'
								}]
					}]
		});
detailRule = new Ext.form.FieldSet({
			title : '权限选择',
			border : true,
			labelWidth : 20,
			width : '550',
			autoHeight : true,
			bodyStyle : 'padding:5px 5px;',
			defaults : {
				columnWidth : '.5',
				border : true,
				autoWidth : true,
				layout : 'column'
			},
			items : [{
						xtype : 'itemselector',
						name : 'js',
						imagePath : '/FAM/ext/ux/images/',
						multiselects : [{
									width : 200,
									height : 150,
									store : unselectedstore,
									displayField : 'text',
									style : 'margin-right:10px;',
									valueField : '备选权限'
								}, {
									width : 200,
									height : 150,
									style : 'margin-left:10px;',
									valueField : '已选权限',
									store : selectedstore,
									displayField : 'text'
								}]
					}],
			buttons : [{
						iconCls : 'error',
						text : '全消',
						style : 'margin-right:20px;',
						handler : function() {
							DetailRoleForm.getForm().findField('js').reset();
						}
					}]
		});
/*
 * 双击表格行的时候存放角色详细信息的布局
 */
var BuildDetailRoleForm = function() {

	DetailRoleForm = new Ext.form.FormPanel({
				frame : true,
				width : '100%',
				items : [detailInput, detailRule]
			});
};
updateRoleForm = new Ext.form.FormPanel({
			frame : true,
			width : '100%',
			items : [updateInput, updateRule]
		});
addRoleForm = new Ext.form.FormPanel({
			frame : true,
			width : '100%',
			items : [addInput, addRule]
		});
/*
 * 建立存放详细角色信息的布局
 */
var BuildDetailRoleWindow = function() {
	DetailRoleWindow = new Ext.Window({
				title : '角色详细信息(查看模式)',
				width : 600,
				height : 440,
				modal : true,
				resizable : false,
				closeAction : 'hide',
				items : [DetailRoleForm],
				buttons : [{
							iconCls : 'back',
							text : '返 回',
							handler : function() {
								DetailRoleWindow.hide();
							}
						}],
				buttonAlign : 'right'
			});
};

var addRoleWindow = new Ext.Window({
			title : '添加角色信息(添加模式)',
			width : 600,
			height : 440,
			modal : true,
			resizable : false,
			closeAction : 'hide',
			items : [addRoleForm],
			buttons : [{
				iconCls : 'save',
				text : '保 存',
				handler : function() {
					if (addRoleForm.getForm().isValid()) {
						addRoleWindow.hide();
						var all = addRoleForm.getForm().getValues(true);
						var startlength = 0, endlength;
						endlength = all.length;
						startlength = all.lastIndexOf("=");
						var id = all.substring(startlength + 1, endlength);
						if (id != "") {
							addRoleForm.getForm().submit({
								url : '/FAM/SaveRole',
								method : 'post',
								success : function(f, action) {
									if (action.result.success) {
										insertUserLog(1);
										Ext.Msg.alert('成功', action.result.msg,
												function() {
													Query();
													addRoleForm.getForm()
															.reset();
												}, null);
									}
								},
								failure : function() {
									insertUserLog(2);
									Ext.Msg.alert('错误', "添加失败");
								}
							});
						} else
							alert("添加有错误，用户的权限没有记录,你检查!!!")
					}
				}
			}, {
				iconCls : 'empty',
				text : '清 空',
				handler : function() {
					addRoleForm.getForm().reset();
				}
			}, {
				iconCls : 'back',
				text : '返回',
				handler : function() {
					addRoleWindow.hide();
				}
			}],
			buttonAlign : 'right'
		});
var BuildDeleteWindow = function() {
	DeleteWindow = new Ext.Window({
				title : '~ 删除窗口 (已选中要删除的角色信息)~',
				modal : true,
				width : 500,
				resizable : false,
				autoHeight : true,
				closeAction : 'hide',
				items : [ZCDeleteGridPanel],
				buttons : [{
							iconCls : 'ok',
							text : '确 定',
							handler : DeleteZC
						}, {
							iconCls : 'cancel',
							text : '取 消',
							handler : function() {
								DeleteWindow.hide();
							}
						}],
				buttonAlign : 'center'
			})
};
var changesAssetWindow = new Ext.Window({
			title : '修改资产信息(修改模式)',
			width : 600,
			height : 440,
			modal : true,
			resizable : false,
			closeAction : 'hide',
			items : [updateRoleForm],
			buttons : [{
				iconCls : 'update',
				text : '修 改',
				handler : function() {
					changesAssetWindow.hide();
					if (updateRoleForm.getForm().isValid()) {
						var string = "";
						for (var i = 0; i < selectedstore.getCount(); i++) {
							var record = selectedstore.getAt(i);
							string += record.get('value') + " ";
						}
						updateRoleForm.getForm().submit({
							url : '/FAM/UpdateJS',
							method : 'post',
							params : {
								string : string,
								IdOfRole : IdOfRole
							},
							success : function(f, action) {
								if (action.result.success) {
									insertUserLog(3);
									Ext.Msg.alert('成功', action.result.msg,
											function() {
												RoleStore.reload();
											}, null);
								}
							},
							failure : function() {
								insertUserLog(4);
								Ext.Msg.alert('错误', "添加失败");
							}
						});
					}
				}
			}, {
				iconCls : 'empty',
				text : '清 空',
				handler : function() {
					updateRoleForm.getForm.reset();
				}
			}, {
				iconCls : 'back',
				text : '返 回',
				handler : function() {
					changesAssetWindow.hide();
				}
			}],
			buttonAlign : 'right'
		});

var insertUserLog = function(flag) {
	if (flag == 1) {
		Ext.Ajax.request({
					url : '/FAM/insertLog',
					success : Ext.emptyFn(),
					failure : Ext.emptyFn(),
					params : {
						data : 1,
						type : "添加角色信息",
						obj : "角色"
					}
				});
	} else if (flag == 2) {
		Ext.Ajax.request({
					url : '/FAM/insertLog',
					success : Ext.emptyFn(),
					failure : Ext.emptyFn(),
					params : {
						data : 0,
						type : "添加角色信息"
					}
				});
	} else if (flag == 3) {
		Ext.Ajax.request({
					url : '/FAM/insertLog',
					success : Ext.emptyFn(),
					failure : Ext.emptyFn(),
					params : {
						data : 1,
						type : "修改角色信息",
						obj : "角色"
					}
				});
	} else if (flag == 4) {
		Ext.Ajax.request({
					url : '/FAM/insertLog',
					success : Ext.emptyFn(),
					failure : Ext.emptyFn(),
					params : {
						data : 0,
						type : "修改角色信息",
						obj : "角色"
					}
				});
	} else if (flag == 5) {
		Ext.Ajax.request({
					url : '/FAM/insertLog',
					success : Ext.emptyFn(),
					failure : Ext.emptyFn(),
					params : {
						data : 1,
						type : "删除角色信息",
						obj : "角色"
					}
				});
		DeleteWindow.hide();
	} else if (flag == 6) {
		Ext.Ajax.request({
					url : '/FAM/insertLog',
					success : Ext.emptyFn(),
					failure : Ext.emptyFn(),
					params : {
						data : 0,
						type : "删除角色信息",
						obj : "角色"
					}
				});
	}
}
var BuildLayout = function() {
	new Ext.Viewport({
				layout : 'border',
				items : [{
							region : 'center',
							layout : 'fit',
							items : [RoleGridPanel]
						}]
			})
};

/*
 * 初始化各个界面的布局
 */
var init = function() {
	Ext.QuickTips.init();
	Ext.form.Field.prototype.msgTarget = 'side';
	BuildDetailRoleForm();
	BuildDetailRoleWindow();
	BuildRoleGrid();
	BuildLayout();
}

Ext.onReady(init);